<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>图书列表</title>
    <link rel="stylesheet" href="layui/css/layui.css">
</head>
<body>
    <script src="layui/layui.js"></script>

    <h1 style="text-align: center; color: dodgerblue">图书列表</h1>

    <!-- 数据表格 layui-hide隐藏初始渲染提升客户使用体验 id是用于layiu.table绑定的 lay-filter用于绑定监听事件的 -->
    <table class="layui-hide" id="test" lay-filter="test"></table>

    <script>
        layui.use(function(){
            let table = layui.table;

            table.render({
                elem: "#test",
                page: {
                    limit: 5,
                    limits: [5, 10, 20, 30],
                    prev: "上一页",
                    next: "下一页",
                    groups: 10,
                    theme: "#1e9fff"
                },
                toolbar: `
                    <div>
                        <button type="button" lay-event="batchDel" class="layui-btn layui-btn-sm layui-btn-normal layui-bg-red">批量删除</button>
                        <button type="button" lay-event="addBook" class="layui-btn layui-btn-sm layui-btn-normal">添加</button>
                    </div>
                `,
                url: "http://localhost:8080/getBooksPage",
                request: {
                    pageName: "pageNo",
                    limitName: "pageSize"
                },
                parseData: function (res) {
                    return {
                        "code": res.code,
                        "msg": res.msg,
                        "count": res.data.total,
                        "data": res.data.records
                    }
                },
                cols: [[
                    // 复选框
                    {
                        type: "checkbox",
                        fixed: "left"
                    },
                    {
                        title: "图书编号",
                        field: "bookId"
                    },
                    {
                        title: "图书名称",
                        field: "bookName"
                    },
                    {
                        title: "图书作者",
                        field: "authorName"
                    },
                    {
                        title: "图书分类",
                        templet: function (res) {
                            return res.category.categoryName;
                        }
                    },
                    {
                        title: "图书价格",
                        field: "price",
                        sort: true
                    },
                    {
                        title: "是否上架",
                        templet: function (res) {
                            return res.status == 0 ? "<span class='layui-badge layui-bg-green'>下架</span>" : "<span class='layui-badge'>上架</span>"
                        }
                    },
                    {
                        title: "创建时间",
                        field: "createTime"
                    },
                    {
                        title: "操作",
                        templet: function (res) {
                            let button = '<button type="button" lay-event="edit" class="layui-btn layui-btn-sm layui-btn-normal">更新</button>';
                            button += '<button type="button" lay-event="del" class="layui-btn layui-btn-sm layui-btn-normal layui-bg-red">删除</button>';
                            return button;
                        }
                    }
                ]]
            });

            // 获取Jquery对象用于发送ajax请求 layui底层封装Jquery
            let $ = layui.$;
            // layui的弹出层组件 用于确定是否删除
            let layer = layui.layer;

            // 绑定点击事件 针对lay-filter为test的table 表格中 只对声明了lay-event的单元格生效 通过回调函数产出内容obj来做后续事情
            table.on(
                // tool主要用于操作一行的事件  toolbar一般用于操作整个表格的事件例如多选框操作
                "tool(test)", function (eventObj) {
                    console.log(eventObj);

                    if (eventObj.event == "del") {
                        // 弹出层的提示信息 选项名 index理解为 用户选择的选项
                        layer.confirm("确定删除？", {btn: ["确定", "取消"]}, function (index) {
                            $.ajax({
                                url: "http://localhost:8080/delete",
                                type: "DELETE", // 指定请求方法为 DELETE
                                data: { bookId: eventObj.data.bookId }, // 传递参数
                                dataType: "json", // 预期返回 JSON 数据
                                success: function(res) {
                                    if (res.code == 0) {
                                        table.reload("test"); // 删除成功后刷新表格
                                    } else {
                                        layer.msg(res.msg); // 显示错误信息
                                    }
                                },
                                error: function(xhr, status, error) {
                                    layer.msg("删除失败：" + error); // 处理请求错误
                                }
                            });

                            // 关闭提示框
                            layer.close(index);
                        });
                    } else if (eventObj.event == "edit") {

                    }
                }
            );

            // 顶部工具栏事件 一般用于处理针对表格的操作
            table.on(
                "toolbar(test)", function (eventObj) {
                    if (eventObj.event == "batchDel") {
                        // id为test的表格选中的数据
                        let list = table.checkStatus("test").data;

                        if (list && list.length == 0) {
                            layer.msg("没有选中的数据");
                        } else {
                            layer.confirm("确定删除？", {btn: ["确定", "取消"]}, function (index) {
                                // 提取 id 组成新数组
                                let idArray = list.map(item => item.bookId);

                                $.ajax({
                                    url: "http://localhost:8080/batchDelete",
                                    type: "DELETE", // 指定请求方法为 DELETE
                                    data: JSON.stringify(idArray), // 传递参数
                                    contentType: "application/json",
                                    dataType: "json", // 预期返回 JSON 数据
                                    success: function(res) {
                                        if (res.code == 0) {
                                            table.reload("test"); // 删除成功后刷新表格
                                        } else {
                                            layer.msg(res.msg); // 显示错误信息
                                        }
                                    },
                                    error: function(xhr, status, error) {
                                        layer.msg("删除失败：" + error); // 处理请求错误
                                    }
                                });

                                // 关闭提示框
                                layer.close(index);
                            });
                        }
                    } else if (eventObj.event == "addBook") {

                    }
                }
            );


        });
    </script>
</body>
</html>